WebWork 2 : Xwork组件架构
This page last changed on Jun 18, 2004 by plightbo.
编写组件类在XWork中, 组件类可以是你希望的任何事物. 唯一的约束是必须有一个具体(concrete)类, 它有一个缺省构造函数, 这样XWork才能创建实例. 组件可以实现Initializable和Disposable接口这样在创建后核销会前可以接受到生命周期事件. 这很简单:public class MyComponent implements Intializable, Disposable { public void init () { //do initialization here } public void dispose() { //do any clean up necessary before garbage collection of this component } } 组件依赖一个不那么明显的特性是组件可以依赖于其他组件. 例如: 如果ExchangeRateService依赖于Configuration组件, XWork将在ExchangeRateService初始化后向它传递Configuration组件实例. 注意, XWork自动以正确的顺序初始化组件, 如果A是一个依赖于B和C的组件或活动, B依赖于C, 如果A, B, C之前没有被初始化, ComponentManager将使用下面的顺序:
当然, 如果B或C的实例已经存在则将在本例中复用, 示例将直接传递到A中 . 编写EnablerEnabler只能有一个方法, 方法只接受一个参数. 参数类型应当是所需的组件的类型或者组件的父类型. XWork不关心enabler方法名称.下列展示ExchangeRateAware可能使用的代码: public interface ExchangeRateAware { public void setExchangeRateService(ExchangeRateService exchangeRateService); } 注意enabler通常是一个接口, 当然也没有阻止你选择使用类. 编写"Enabler-aware"的活动活动类需要做的是实现相应的enabler接口. XWork随后将在活动执行前调用它的enabler方法. 下面是一个简单的例子: public class MyAction extends ActionSupport implements ExchangeRateAware { ExchangeRateService ers; public void setExchangeRateService(ExchangeRateService exchangeRateService) { ers = exchangeRateService; } public String execute() throws Exception { System.out.println("The base currency is " + ers.getBaseCurrency()); } } 如果一个对象既不是活动也不是组件, 你必须显示调用componentManager.initializeObject(enabledObject)通知XWork为该对象提供所需的组件; 使用外部引用处理器(resolver)在XWork也可以使用外部引用处理器, 也就是说, 不由XWork自己处理引用. 一个例子是使用外部引用处理器将XWork和Spring Framework集成起来. 只需要编写一个外部引用处理器并在package声明中告诉XWork去使用它:<package
name="default"
externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver">
现在, 为了使用外部引用你需要使用类似下面的方法: <external-ref name="foo">Foo</external-ref> 在这里, name属性是setter方法的名称, Foo是需要查找的引用名称. 关于集成的更多细节和样例代码, 请查看com.opensymphony.xwork.config.ExternalReferenceResolver类的JavaDoc(不幸的是没有在线信息)以及XW-122 -Chris |
Document generated by Confluence on Dec 14, 2004 16:37 |